package Atomic;

import org.junit.Test;

import java.lang.reflect.Constructor;

public class BankCardTest {
    private static volatile BankCard bankCard = new BankCard("李四",100);

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            new Thread(()->{
                final BankCard card = bankCard;
                BankCard newCard = new BankCard(card.getAccountName(), card.getMoney() + 100);
                System.out.println(newCard);
                bankCard =newCard;
            }).start();
        }
    }

    @Test
    public void newBankCard() throws Exception{
        //创建对象的五种方法
        //1、直接new对象
        BankCard bankCard = new BankCard("王五", 20);
        System.out.println(bankCard);
        //2、使用Class类的newInstance方法
        Class<?> backCardClass = Class.forName("Atomic.BankCard");
        BankCard o = (BankCard)backCardClass.newInstance();
        o.setAccountName("赵六");
        o.setMoney(30);
        System.out.println(o);
        //3、使用构造器的newInstance方法
        Constructor<?> constructor = backCardClass.getConstructor(new Class[]{String.class, Integer.class});
        Object o1 = constructor.newInstance(new Object[] {"孙七",40
        });
        System.out.println(o1);
        //4、使用clone的方法
        //无论何时我们调用一个对象的clone方法，JVM就会创建一个新的对象，将前面的对象的内容全部拷贝进去，用clone方法创建对象并不会调用任何构造函数。要使用clone方法，我们必须先实现Cloneable接口并实现其定义的clone方法。
        //5、使用反序列化的方法
    }

    @Test
    public void testone(){
    Long l = 199999999999999999L;
    Long aLong = 199999999999999999L;
    Integer a =13;
    Integer b = 13;
    Long c =13L;
        System.out.println(a==b.intValue());

        System.out.println(a.equals(b));
        System.out.println(l.equals(aLong));
    }
}
